/**
 * WangSong 2009-6-9 下午04:10:33 增加readonly属性
 */
package cn.biplam.front.html;

import cn.biplam.common.wrapper.ErrorMessage;
import cn.biplam.front.html.base.Html;
import cn.biplam.front.html.base.HtmlWindow;

/**
 * Html text输入对象(input text)
 * @author 	WangSong 2009-4-6 下午03:02:36
 * @version 1.0
 */
public class HtmlInput extends HtmlWindow {
	
	private int iMaxLength=0;
	private int iSize=0;
	private int iTabIndex=0;
	private String name;
	protected String type="text";
	private String value;
	private boolean isReadOnly=false;
	
	/**
	 * 构造方法 传入对象ID初始化
	 * @param ID
	 */
	public HtmlInput(String ID){
		super(ID);
	}
	
	/**
	 * 构造方法 传入对象ID和cssID初始化
	 * @param ID	
	 * @param cssID
	 */
	public HtmlInput(String ID,String cssID){
		super(ID,cssID);
	}
	
	/**
	 * 构造方法		传入对象的页面ID、cssID和数据项名称初始化
	 * @param ID	对象ID
	 * @param cssID	
	 * @param name	绑定数据项名称
	 */
	public HtmlInput(String ID,String cssID,String name){
		super(ID,cssID);
		this.name=name;
	}
	
	/**
	 * 构造方法		传入对象的页面ID、cssID和数据项名称初始化
	 * @param ID	对象ID
	 * @param cssID	
	 * @param name	绑定数据项名称
	 * @param value	绑定数据项值
	 */
	public HtmlInput(String ID,String cssID,String name,String value){
		super(ID,cssID);
		this.name=name;
		_setValue(value);
	}

	/**
	 * 设置输入框值,处理单引号
	 * @param value
	 */
	private void _setValue(String value){
		if(value!=null){
			this.value = value.replace("'","&#39;");
		}
	}
	
	/**
	 * 返回实现类自定义的位于对象起始和结束标签内的 HTML
	 * @param sb 传入的写缓冲区
	 * @throws ErrorMessage
	 */
	protected void _getContent(StringBuilder sb) throws ErrorMessage {
		if(this.name!=null){
			sb.append(" name='");
			sb.append(this.name);
			sb.append("'");
		}
		if(this.value!=null){
			sb.append(" value='");
			sb.append(this.value);
			sb.append("'");
		}
		if(this.iSize!=0){
			sb.append(" size=");
			sb.append(this.iSize);
		}
		if(this.iMaxLength>0){
			sb.append(" maxLength=");
			sb.append(this.iMaxLength);
		}
		if(this.iTabIndex>0){
			sb.append(" tabIndex=");
			sb.append(this.iTabIndex );
		}
	}
	
	/**
	 * 设置只读属性
	 * @param isReadOnly
	 */
	public void setReadOnly(boolean isReadOnly){
		this.isReadOnly=isReadOnly;
	}
	
	/**
	 * 复制对象
	 * @return 创建的新对象实例
	 * @throws ErrorMessage
	 */
	public HtmlWindow copy() throws ErrorMessage {
		HtmlInput input = new HtmlInput(this.getID(),this.getCssID(),name,value);
		input.iSize=this.iSize;
		input.iMaxLength=this.iMaxLength;
		input.iTabIndex=this.iTabIndex;
		super._copy(input);
		return input;
	}

	/**
	 * 获取对象及其内容的 HTML 形式(不包含客户端绑定脚本)
	 * @param sb 传入的写缓冲区
	 * @throws ErrorMessage
	 */
	public void getHtml(StringBuilder sb) throws ErrorMessage {
		sb.append("<input type=");
		sb.append(this.type);
		sb.append(" ");
		if(this.isReadOnly){
			sb.append("readonly ");
		}
		super.writeTagSetting(sb);
		this._getContent(sb);//HtmlInput对象不允许再内置对象
		sb.append(">");
	}

	public int getMaxLength() {
		return iMaxLength;
	}

	public String getName() {
		return name;
	}

	/**
	 * 返回input可显示的字符数量
	 * @return	可显示的字节数量
	 */
	public int getSize() {
		return iSize;
	}

	public int getTabIndex() {
		return iTabIndex;
	}

	public String getValue() {
		return value;
	}

	/**@deprecated
	 * 禁止调用该方法
	 * @param html
	 * @throws ErrorMessage
	 */
	public void put(Html html) throws ErrorMessage {
		//TODO 设置异常类型
		throw new ErrorMessage("不允许向HtmlValue放入Html对象!");
	}

	/**
	 * 设置或获取用户可在文本控件中输入的最多字符数(一个汉字为2个字符，一个英文字母一个字符)
	 * @param maxLength 字符数
	 */
	public void setMaxLength(int maxLength) {
		iMaxLength = maxLength;
	}

	public void setName(String name) {
		this.name = name;
	}

	/**
	 * 设置input可显示的字符数量
	 * @param size	字符数量
	 */
	public void setSize(int size) {
		iSize = size;
	}

	public void setTabIndex(int tabIndex) {
		iTabIndex = tabIndex;
	}

	public void setValue(String value) {
		this.value = value;
	}
}
